<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>MiXiM: D:/Projects/MiXiM/extsrc/mixim/src/base/phyLayer/ChannelInfo.h Source File</title>

<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
</script>


</head>
<body>
<div id="top"><!-- do not remove this div! -->


<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  
  
  <td style="padding-left: 0.5em;">
   <div id="projectname">MiXiM
   &#160;<span id="projectnumber">2.3</span>
   </div>
   
  </td>
  
  
  
 </tr>
 </tbody>
</table>
</div>

<!-- Generated by Doxygen 1.7.5.1 -->
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li><a href="annotated.html"><span>Classes</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
      <li><a href="dirs.html"><span>Directories</span></a></li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="files.html"><span>File&#160;List</span></a></li>
    </ul>
  </div>
</div>
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
  initNavTree('a00287.html','');
</script>
<div id="doc-content">
<div class="header">
  <div class="headertitle">
<div class="title">ChannelInfo.h</div>  </div>
</div>
<div class="contents">
<div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef CHANNELINFO_H_</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define CHANNELINFO_H_</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include &lt;list&gt;</span>
<a name="l00005"></a>00005 <span class="preprocessor">#include &lt;map&gt;</span>
<a name="l00006"></a>00006 <span class="preprocessor">#include &lt;omnetpp.h&gt;</span>
<a name="l00007"></a>00007 
<a name="l00008"></a>00008 <span class="preprocessor">#include &quot;MiXiMDefs.h&quot;</span>
<a name="l00009"></a>00009 <span class="preprocessor">#include &quot;MiXiMAirFrame.h&quot;</span>
<a name="l00010"></a>00010 
<a name="l00045"></a><a class="code" href="a00043.html">00045</a> <span class="keyword">class </span>MIXIM_API <a class="code" href="a00043.html" title="This class is used by the BasePhyLayer to keep track of the AirFrames on the channel.">ChannelInfo</a> {
<a name="l00046"></a>00046 <span class="keyword">public</span>:
<a name="l00047"></a>00047     <span class="keyword">typedef</span> MiximAirFrame  airframe_t;
<a name="l00049"></a><a class="code" href="a00043.html#aa93cf512eb51209e31b2d4903faca31d">00049</a>   <span class="keyword">typedef</span> airframe_t*    <a class="code" href="a00043.html#aa93cf512eb51209e31b2d4903faca31d">airframe_ptr_t</a>;
<a name="l00051"></a><a class="code" href="a00043.html#a6e51dfe3982d95dace93761852a0ac07">00051</a>   <span class="keyword">static</span> const_simtime_t <a class="code" href="a00043.html#a6e51dfe3982d95dace93761852a0ac07" title="Invalid simulation time point, will be used for return value of emptiness.">invalidSimTime</a>;
<a name="l00052"></a>00052 
<a name="l00055"></a><a class="code" href="a00007.html">00055</a>   <span class="keyword">struct </span><a class="code" href="a00007.html" title="Functor which can be used as to filter for specific air frames.">airframe_filter_fctr</a> {
<a name="l00056"></a>00056     <span class="keyword">virtual</span> ~<a class="code" href="a00007.html" title="Functor which can be used as to filter for specific air frames.">airframe_filter_fctr</a>() {}
<a name="l00057"></a>00057 
<a name="l00062"></a><a class="code" href="a00007.html#a796b51b43fe836f58fd21fa0deab7113">00062</a>     <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="a00007.html#a796b51b43fe836f58fd21fa0deab7113" title="Return true if the air frame fits your criteria.">pass</a>(<span class="keyword">const</span> <a class="code" href="a00043.html#aa93cf512eb51209e31b2d4903faca31d">airframe_ptr_t</a>&amp; a)<span class="keyword"> const </span>{
<a name="l00063"></a>00063       <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l00064"></a>00064     }
<a name="l00065"></a>00065     };
<a name="l00066"></a>00066 <span class="keyword">protected</span>:
<a name="l00071"></a><a class="code" href="a00043.html#aba8c8f81b5fad9216a08d86de4acb070">00071</a>   <span class="keyword">typedef</span> std::map&lt;simtime_t, std::multimap&lt;simtime_t, airframe_ptr_t&gt; &gt; <a class="code" href="a00043.html#aba8c8f81b5fad9216a08d86de4acb070">AirFrameMatrix</a>;
<a name="l00072"></a>00072 
<a name="l00073"></a><a class="code" href="a00042.html">00073</a>   <span class="keyword">struct </span><a class="code" href="a00042.html">c_min_start_time_fctr</a> {
<a name="l00074"></a>00074     <span class="keywordtype">bool</span> operator() (<span class="keyword">const</span> AirFrameMatrix::value_type&amp; a, <span class="keyword">const</span> AirFrameMatrix::value_type&amp; b) {
<a name="l00075"></a>00075       <span class="keywordflow">return</span> a.second.key_comp()(a.second.begin()-&gt;first, b.second.begin()-&gt;first);
<a name="l00076"></a>00076     }
<a name="l00077"></a>00077   };
<a name="l00078"></a>00078 
<a name="l00102"></a>00102   <span class="keyword">template</span>&lt;<span class="keyword">typename</span> C, <span class="keyword">typename</span> ItMatrix = <span class="keyword">typename</span> C::const_iterator, <span class="keyword">typename</span> ItSubMatrix = <span class="keyword">typename</span> C::mapped_type::const_iterator&gt;
<a name="l00103"></a><a class="code" href="a00024.html">00103</a>   <span class="keyword">class </span><a class="code" href="a00024.html" title="Iterator for every intersection of a specific interval in a AirFrameMatrix.">BaseIntersectionIterator</a>
<a name="l00104"></a>00104   {
<a name="l00105"></a>00105   <span class="keyword">public</span>:
<a name="l00106"></a>00106     <span class="keyword">typedef</span> <span class="keyword">typename</span> ItSubMatrix::value_type value_type;
<a name="l00107"></a>00107     <span class="keyword">typedef</span> <span class="keyword">typename</span> ItSubMatrix::reference  reference;
<a name="l00108"></a>00108     <span class="keyword">typedef</span> <span class="keyword">typename</span> ItSubMatrix::pointer    pointer;
<a name="l00109"></a>00109 
<a name="l00110"></a>00110     <span class="keyword">typedef</span> <a class="code" href="a00024.html" title="Iterator for every intersection of a specific interval in a AirFrameMatrix.">BaseIntersectionIterator&lt;C, ItMatrix, ItSubMatrix&gt;</a> <a class="code" href="a00024.html" title="Iterator for every intersection of a specific interval in a AirFrameMatrix.">iterator</a>;
<a name="l00111"></a>00111 
<a name="l00112"></a>00112     <span class="keyword">typedef</span> std::bidirectional_iterator_tag iterator_category;
<a name="l00113"></a>00113     <span class="keyword">typedef</span> ptrdiff_t                       difference_type;
<a name="l00114"></a>00114 
<a name="l00115"></a>00115   <span class="keyword">protected</span>:
<a name="l00116"></a>00116     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00043.html" title="This class is used by the BasePhyLayer to keep track of the AirFrames on the channel.">ChannelInfo</a>;
<a name="l00117"></a>00117     <span class="keyword">typedef</span> <a class="code" href="a00024.html" title="Iterator for every intersection of a specific interval in a AirFrameMatrix.">BaseIntersectionIterator&lt;C, ItMatrix, ItSubMatrix&gt;</a> <a class="code" href="a00024.html" title="Iterator for every intersection of a specific interval in a AirFrameMatrix.">_Self</a>;
<a name="l00118"></a>00118     <span class="comment">//typedef _Rb_tree_node_base::_Const_Base_ptr _Base_ptr;</span>
<a name="l00119"></a>00119     <span class="comment">//typedef const _Rb_tree_node&lt;_Tp&gt;*           _Link_type;</span>
<a name="l00120"></a>00120 
<a name="l00122"></a><a class="code" href="a00024.html#a752c33584da635c8293c29c2116cdc42">00122</a>     C* <a class="code" href="a00024.html#a752c33584da635c8293c29c2116cdc42" title="Pointer to the matrix holding the intervals.">intervals</a>;
<a name="l00123"></a>00123 
<a name="l00125"></a><a class="code" href="a00024.html#ae2985262dd881a9c3598ca5e780b3a46">00125</a>     simtime_t_cref <a class="code" href="a00024.html#ae2985262dd881a9c3598ca5e780b3a46" title="Point in time to start iterating over intersections.">from</a>;
<a name="l00126"></a>00126 
<a name="l00128"></a><a class="code" href="a00024.html#a0cafe335b6679b27f704565c57432047">00128</a>     simtime_t_cref <a class="code" href="a00024.html#a0cafe335b6679b27f704565c57432047" title="Point in time to end iterating over intersections.">to</a>;
<a name="l00129"></a>00129 
<a name="l00131"></a><a class="code" href="a00024.html#a0546c8bfc867fbe321668ac876328d6d">00131</a>     ItMatrix <a class="code" href="a00024.html#a0546c8bfc867fbe321668ac876328d6d" title="Iterator over AirFrame end times.">endIt</a>;
<a name="l00132"></a>00132 
<a name="l00134"></a><a class="code" href="a00024.html#ab0d649bb86964e452843cfc9a78f09b5">00134</a>     ItSubMatrix <a class="code" href="a00024.html#ab0d649bb86964e452843cfc9a78f09b5" title="Iterator over AirFrame start times.">startIt</a>;
<a name="l00135"></a>00135     ItSubMatrix startItEnd;
<a name="l00136"></a>00136 
<a name="l00141"></a><a class="code" href="a00024.html#a793a9ebbc78c634d3e74fe50aaf0b04e">00141</a>       <a class="code" href="a00024.html" title="Iterator for every intersection of a specific interval in a AirFrameMatrix.">_Self</a>&amp; jumpToNextValid(ItMatrix endItEnd)
<a name="l00142"></a>00142       {
<a name="l00143"></a>00143       <span class="keywordflow">for</span> (; endIt != endItEnd; startIt = endIt-&gt;second.begin()) {
<a name="l00144"></a>00144         <span class="comment">// while there are entries left at the current end-time</span>
<a name="l00145"></a>00145         <span class="keywordflow">if</span> (startIt != startItEnd) {
<a name="l00146"></a>00146           <span class="comment">// check if this entry fulfills the intersection condition</span>
<a name="l00147"></a>00147           <span class="comment">// 2 (condition 1 is already fulfilled in the constructor by</span>
<a name="l00148"></a>00148           <span class="comment">// the start-value of the end-time-iterator)</span>
<a name="l00149"></a>00149           <span class="keywordflow">return</span> *<span class="keyword">this</span>;
<a name="l00150"></a>00150         }
<a name="l00151"></a>00151         <span class="keywordflow">if</span> (++endIt != endItEnd) {
<a name="l00152"></a>00152           startItEnd = endIt-&gt;second.upper_bound(to);
<a name="l00153"></a>00153         }
<a name="l00154"></a>00154       }
<a name="l00155"></a>00155 
<a name="l00156"></a>00156       intervals = NULL;
<a name="l00157"></a>00157       <span class="keywordflow">return</span> *<span class="keyword">this</span>;
<a name="l00158"></a>00158       }
<a name="l00159"></a>00159   <span class="keyword">public</span>:
<a name="l00164"></a><a class="code" href="a00024.html#a6395e3ba8586e3de880388e5d5d58f21">00164</a>     <a class="code" href="a00024.html" title="Iterator for every intersection of a specific interval in a AirFrameMatrix.">BaseIntersectionIterator</a>(C* airFrames, simtime_t_cref from, simtime_t_cref to) :
<a name="l00165"></a>00165       intervals(airFrames), from(from), to(to), endIt(), startIt(), startItEnd()
<a name="l00166"></a>00166     {
<a name="l00167"></a>00167       <span class="comment">// begin at the smallest end-time-entry fulfilling the intersection</span>
<a name="l00168"></a>00168       <span class="comment">// condition 1</span>
<a name="l00169"></a>00169       <span class="keywordflow">if</span> (intervals) {
<a name="l00170"></a>00170         endIt = intervals-&gt;lower_bound(from);
<a name="l00171"></a>00171         <span class="keywordflow">if</span>(endIt != intervals-&gt;end()) {
<a name="l00172"></a>00172           startIt    = endIt-&gt;second.begin();
<a name="l00173"></a>00173           startItEnd = endIt-&gt;second.upper_bound(to);
<a name="l00174"></a>00174           jumpToNextValid(intervals-&gt;end());
<a name="l00175"></a>00175         }
<a name="l00176"></a>00176         <span class="keywordflow">else</span> {
<a name="l00177"></a>00177           intervals = NULL;
<a name="l00178"></a>00178           startIt   = startItEnd;
<a name="l00179"></a>00179         }
<a name="l00180"></a>00180       }
<a name="l00181"></a>00181       <span class="keywordflow">else</span> {
<a name="l00182"></a>00182         startIt = startItEnd;
<a name="l00183"></a>00183       }
<a name="l00184"></a>00184       <span class="comment">//we are already pointing at the first unchecked interval</span>
<a name="l00185"></a>00185     }
<a name="l00186"></a>00186     <a class="code" href="a00024.html" title="Iterator for every intersection of a specific interval in a AirFrameMatrix.">BaseIntersectionIterator</a>(<span class="keyword">const</span> <a class="code" href="a00024.html" title="Iterator for every intersection of a specific interval in a AirFrameMatrix.">iterator</a>&amp; __it) :
<a name="l00187"></a>00187       intervals(__it.intervals), from(__it.from), to(__it.to), endIt(__it.endIt), startIt(__it.startIt),  startItEnd(__it.startItEnd)
<a name="l00188"></a>00188     { }
<a name="l00189"></a>00189 
<a name="l00190"></a>00190     reference
<a name="l00191"></a>00191       operator*()<span class="keyword"> const</span>
<a name="l00192"></a>00192 <span class="keyword">    </span>{
<a name="l00193"></a>00193       <span class="keywordflow">if</span>(intervals == NULL || endIt == intervals-&gt;end() || startIt == startItEnd)
<a name="l00194"></a>00194         <span class="keywordflow">return</span> NULL;
<a name="l00195"></a>00195       <span class="keywordflow">return</span> startIt.operator*();
<a name="l00196"></a>00196     }
<a name="l00197"></a>00197 
<a name="l00198"></a>00198     pointer
<a name="l00199"></a>00199       operator-&gt;()<span class="keyword"> const</span>
<a name="l00200"></a>00200 <span class="keyword">    </span>{
<a name="l00201"></a>00201       <span class="keywordflow">if</span>(intervals == NULL || endIt == intervals-&gt;end() || startIt == startItEnd)
<a name="l00202"></a>00202         <span class="keywordflow">return</span> NULL;
<a name="l00203"></a>00203       <span class="keywordflow">return</span> startIt.operator-&gt;();
<a name="l00204"></a>00204     }
<a name="l00205"></a>00205 
<a name="l00208"></a>00208     _Self&amp;
<a name="l00209"></a><a class="code" href="a00024.html#a45eb6b8c190d1fe0126ba0ff633b7be0">00209</a>     operator++()
<a name="l00210"></a>00210     {
<a name="l00211"></a>00211       <span class="keywordflow">if</span> (!intervals)
<a name="l00212"></a>00212         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
<a name="l00213"></a>00213 
<a name="l00214"></a>00214       <span class="keyword">const</span> ItMatrix endItEnd = intervals-&gt;end();
<a name="l00215"></a>00215       <span class="keywordflow">if</span>(endIt == endItEnd) {
<a name="l00216"></a>00216         intervals = NULL;
<a name="l00217"></a>00217         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
<a name="l00218"></a>00218       }
<a name="l00219"></a>00219 
<a name="l00220"></a>00220       <span class="keywordflow">if</span> (startIt != startItEnd)
<a name="l00221"></a>00221         ++startIt;
<a name="l00222"></a>00222 
<a name="l00223"></a>00223       <span class="keywordflow">return</span> jumpToNextValid(endItEnd);
<a name="l00224"></a>00224     }
<a name="l00225"></a>00225 
<a name="l00228"></a>00228     _Self
<a name="l00229"></a><a class="code" href="a00024.html#a980d6201ccb18916142ca01c30c16152">00229</a>     operator++(<span class="keywordtype">int</span>)
<a name="l00230"></a>00230       {
<a name="l00231"></a>00231       <a class="code" href="a00024.html" title="Iterator for every intersection of a specific interval in a AirFrameMatrix.">_Self</a> __tmp = *<span class="keyword">this</span>;
<a name="l00232"></a>00232       ++(*this);
<a name="l00233"></a>00233       <span class="keywordflow">return</span> __tmp;
<a name="l00234"></a>00234       }
<a name="l00235"></a>00235 
<a name="l00238"></a>00238       <span class="keywordtype">bool</span>
<a name="l00239"></a><a class="code" href="a00024.html#a38ab956a1689568c8b0ba646ab479421">00239</a>       operator==(<span class="keyword">const</span> <a class="code" href="a00024.html" title="Iterator for every intersection of a specific interval in a AirFrameMatrix.">_Self</a>&amp; __x)<span class="keyword"> const</span>
<a name="l00240"></a>00240 <span class="keyword">      </span>{
<a name="l00241"></a>00241         <span class="keywordflow">if</span> (intervals == NULL) {
<a name="l00242"></a>00242           <span class="keywordflow">if</span> (__x.<a class="code" href="a00024.html#a752c33584da635c8293c29c2116cdc42" title="Pointer to the matrix holding the intervals.">intervals</a> == NULL)
<a name="l00243"></a>00243             <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l00244"></a>00244           <span class="keywordflow">return</span> (__x.<a class="code" href="a00024.html#a0546c8bfc867fbe321668ac876328d6d" title="Iterator over AirFrame end times.">endIt</a> == __x.<a class="code" href="a00024.html#a752c33584da635c8293c29c2116cdc42" title="Pointer to the matrix holding the intervals.">intervals</a>-&gt;end() || __x.<a class="code" href="a00024.html#ab0d649bb86964e452843cfc9a78f09b5" title="Iterator over AirFrame start times.">startIt</a> == __x.startItEnd); <span class="comment">// we have no next element</span>
<a name="l00245"></a>00245         }
<a name="l00246"></a>00246         <span class="keywordflow">if</span> (__x.<a class="code" href="a00024.html#a752c33584da635c8293c29c2116cdc42" title="Pointer to the matrix holding the intervals.">intervals</a> == NULL) {
<a name="l00247"></a>00247           <span class="keywordflow">return</span> (endIt == intervals-&gt;end() || startIt == endIt-&gt;second.end()); <span class="comment">// we have no next element</span>
<a name="l00248"></a>00248         }
<a name="l00249"></a>00249         <span class="keywordflow">if</span>( (endIt == intervals-&gt;end() &amp;&amp; __x.<a class="code" href="a00024.html#a0546c8bfc867fbe321668ac876328d6d" title="Iterator over AirFrame end times.">endIt</a> == __x.<a class="code" href="a00024.html#a752c33584da635c8293c29c2116cdc42" title="Pointer to the matrix holding the intervals.">intervals</a>-&gt;end()) || (startIt == startItEnd &amp;&amp; __x.<a class="code" href="a00024.html#ab0d649bb86964e452843cfc9a78f09b5" title="Iterator over AirFrame start times.">startIt</a> == __x.startItEnd) )
<a name="l00250"></a>00250           <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l00251"></a>00251         <span class="keywordflow">return</span> intervals == __x.<a class="code" href="a00024.html#a752c33584da635c8293c29c2116cdc42" title="Pointer to the matrix holding the intervals.">intervals</a> &amp;&amp; from == __x.<a class="code" href="a00024.html#ae2985262dd881a9c3598ca5e780b3a46" title="Point in time to start iterating over intersections.">from</a> &amp;&amp; to == __x.<a class="code" href="a00024.html#a0cafe335b6679b27f704565c57432047" title="Point in time to end iterating over intersections.">to</a> &amp;&amp; endIt == __x.<a class="code" href="a00024.html#a0546c8bfc867fbe321668ac876328d6d" title="Iterator over AirFrame end times.">endIt</a> &amp;&amp; startIt == __x.<a class="code" href="a00024.html#ab0d649bb86964e452843cfc9a78f09b5" title="Iterator over AirFrame start times.">startIt</a> &amp;&amp; startItEnd == __x.startItEnd;
<a name="l00252"></a>00252       }
<a name="l00253"></a>00253 
<a name="l00256"></a>00256       <span class="keywordtype">bool</span>
<a name="l00257"></a><a class="code" href="a00024.html#ad924b017640e7eaf589c78bcff4ee730">00257</a>       operator!=(<span class="keyword">const</span> <a class="code" href="a00024.html" title="Iterator for every intersection of a specific interval in a AirFrameMatrix.">_Self</a>&amp; __x)<span class="keyword"> const</span>
<a name="l00258"></a>00258 <span class="keyword">      </span>{ <span class="keywordflow">return</span> !(*<span class="keyword">this</span> == __x); }
<a name="l00259"></a>00259   };
<a name="l00260"></a>00260 
<a name="l00262"></a>00262   <span class="keyword">typedef</span> BaseIntersectionIterator&lt;<span class="keyword">const</span> <a class="code" href="a00043.html#aba8c8f81b5fad9216a08d86de4acb070">AirFrameMatrix</a>,
<a name="l00263"></a>00263                    <a class="code" href="a00043.html#a684323fb3bd48d29674f5b14d7ce2f02" title="Type for a const-iterator over an AirFrame interval matrix.">AirFrameMatrix::const_iterator</a>,
<a name="l00264"></a><a class="code" href="a00043.html#a684323fb3bd48d29674f5b14d7ce2f02">00264</a>                    AirFrameMatrix::mapped_type::const_iterator&gt; <a class="code" href="a00043.html#a684323fb3bd48d29674f5b14d7ce2f02" title="Type for a const-iterator over an AirFrame interval matrix.">const_iterator</a>;
<a name="l00265"></a>00265 
<a name="l00267"></a><a class="code" href="a00043.html#a37ac84f95c3faeb3e2606a4a01dbf36e">00267</a>   <span class="keyword">const</span> <span class="keyword">static</span> <a class="code" href="a00024.html" title="Iterator for every intersection of a specific interval in a AirFrameMatrix.">const_iterator</a> <a class="code" href="a00043.html#a37ac84f95c3faeb3e2606a4a01dbf36e" title="The end iterator for the matrix.">cConstItEnd</a>;
<a name="l00268"></a>00268 
<a name="l00274"></a><a class="code" href="a00043.html#aa372e681d453fa1725e81793cdfb4182">00274</a>   <a class="code" href="a00024.html" title="Iterator for every intersection of a specific interval in a AirFrameMatrix.">const_iterator</a> <a class="code" href="a00043.html#aa372e681d453fa1725e81793cdfb4182">end</a>()<span class="keyword"> const </span>{
<a name="l00275"></a>00275     <span class="keywordflow">return</span> <a class="code" href="a00043.html#a37ac84f95c3faeb3e2606a4a01dbf36e" title="The end iterator for the matrix.">cConstItEnd</a>;
<a name="l00276"></a>00276   }
<a name="l00277"></a>00277 
<a name="l00279"></a>00279   <span class="keyword">typedef</span> BaseIntersectionIterator&lt;<a class="code" href="a00043.html#aba8c8f81b5fad9216a08d86de4acb070">AirFrameMatrix</a>,
<a name="l00280"></a>00280                    <a class="code" href="a00043.html#afef8a1ed99d3d6ea005c5cc358dbbbbc" title="Type for a iterator over an AirFrame interval matrix.">AirFrameMatrix::iterator</a>,
<a name="l00281"></a><a class="code" href="a00043.html#afef8a1ed99d3d6ea005c5cc358dbbbbc">00281</a>                    AirFrameMatrix::mapped_type::iterator&gt; <a class="code" href="a00043.html#afef8a1ed99d3d6ea005c5cc358dbbbbc" title="Type for a iterator over an AirFrame interval matrix.">iterator</a>;
<a name="l00282"></a>00282 
<a name="l00284"></a><a class="code" href="a00043.html#a4ad62d494f91f38b3fe52963cc96fb14">00284</a>   <span class="keyword">const</span> <span class="keyword">static</span> <a class="code" href="a00024.html" title="Iterator for every intersection of a specific interval in a AirFrameMatrix.">iterator</a> <a class="code" href="a00043.html#a4ad62d494f91f38b3fe52963cc96fb14" title="The end iterator for the matrix.">cItEnd</a>;
<a name="l00290"></a><a class="code" href="a00043.html#a8afa15fedf769249c517b832eb577ac2">00290</a>   <a class="code" href="a00024.html" title="Iterator for every intersection of a specific interval in a AirFrameMatrix.">iterator</a> <a class="code" href="a00043.html#a8afa15fedf769249c517b832eb577ac2">end</a>() {
<a name="l00291"></a>00291     <span class="keywordflow">return</span> <a class="code" href="a00043.html#a4ad62d494f91f38b3fe52963cc96fb14" title="The end iterator for the matrix.">cItEnd</a>;
<a name="l00292"></a>00292   }
<a name="l00293"></a>00293 
<a name="l00304"></a><a class="code" href="a00043.html#a97025affc9a97382fc4b767fe698a170">00304</a>   <span class="keywordtype">void</span> <a class="code" href="a00043.html#a97025affc9a97382fc4b767fe698a170" title="Erases an element from a AirFrameMatrix.">erase</a>(<span class="keyword">const</span> <a class="code" href="a00024.html" title="Iterator for every intersection of a specific interval in a AirFrameMatrix.">iterator</a>&amp; __position) {
<a name="l00305"></a>00305     assert(__position.<a class="code" href="a00024.html#a0546c8bfc867fbe321668ac876328d6d" title="Iterator over AirFrame end times.">endIt</a>   != __position.<a class="code" href="a00024.html#a752c33584da635c8293c29c2116cdc42" title="Pointer to the matrix holding the intervals.">intervals</a>-&gt;end());
<a name="l00306"></a>00306     assert(__position.<a class="code" href="a00024.html#ab0d649bb86964e452843cfc9a78f09b5" title="Iterator over AirFrame start times.">startIt</a> != __position.startItEnd);
<a name="l00307"></a>00307 
<a name="l00308"></a>00308     <span class="comment">//erase AirFrame from list</span>
<a name="l00309"></a>00309     __position.<a class="code" href="a00024.html#a0546c8bfc867fbe321668ac876328d6d" title="Iterator over AirFrame end times.">endIt</a>-&gt;second.erase(__position.<a class="code" href="a00024.html#ab0d649bb86964e452843cfc9a78f09b5" title="Iterator over AirFrame start times.">startIt</a>);
<a name="l00310"></a>00310 
<a name="l00311"></a>00311     <span class="comment">//check if we deleted the only entry in the list</span>
<a name="l00312"></a>00312     <span class="keywordflow">if</span>(__position.<a class="code" href="a00024.html#a0546c8bfc867fbe321668ac876328d6d" title="Iterator over AirFrame end times.">endIt</a>-&gt;second.empty()) {
<a name="l00313"></a>00313       __position.<a class="code" href="a00024.html#a752c33584da635c8293c29c2116cdc42" title="Pointer to the matrix holding the intervals.">intervals</a>-&gt;erase(__position.<a class="code" href="a00024.html#a0546c8bfc867fbe321668ac876328d6d" title="Iterator over AirFrame end times.">endIt</a>); <span class="comment">//delete list from map</span>
<a name="l00314"></a>00314     }
<a name="l00315"></a>00315   }
<a name="l00316"></a>00316 
<a name="l00322"></a><a class="code" href="a00043.html#a2db96b70bb8678e3e4959985a7ef27a5">00322</a>   <a class="code" href="a00043.html#aba8c8f81b5fad9216a08d86de4acb070">AirFrameMatrix</a> <a class="code" href="a00043.html#a2db96b70bb8678e3e4959985a7ef27a5" title="Stores the currently active AirFrames.">activeAirFrames</a>;
<a name="l00323"></a>00323 
<a name="l00330"></a><a class="code" href="a00043.html#ac674b4797484960e332e260af4825c04">00330</a>   <a class="code" href="a00043.html#aba8c8f81b5fad9216a08d86de4acb070">AirFrameMatrix</a> <a class="code" href="a00043.html#ac674b4797484960e332e260af4825c04" title="Stores inactive AirFrames.">inactiveAirFrames</a>;
<a name="l00331"></a>00331 
<a name="l00333"></a><a class="code" href="a00043.html#a03476c3a3c992f5e8bb099312e601c6a">00333</a>   <span class="keyword">typedef</span> std::map&lt;long, simtime_t&gt; <a class="code" href="a00043.html#a03476c3a3c992f5e8bb099312e601c6a" title="Type for a map of AirFrame pointers to their start time.">AirFrameStartMap</a>;
<a name="l00334"></a>00334 
<a name="l00336"></a><a class="code" href="a00043.html#a9c7678b4205557914b26e58edcdf44c2">00336</a>   <a class="code" href="a00043.html#a03476c3a3c992f5e8bb099312e601c6a" title="Type for a map of AirFrame pointers to their start time.">AirFrameStartMap</a> <a class="code" href="a00043.html#a9c7678b4205557914b26e58edcdf44c2" title="Stores the start time of every AirFrame.">airFrameStarts</a>;
<a name="l00337"></a>00337 
<a name="l00340"></a><a class="code" href="a00043.html#a647dc636e9aa2f8a70ac99b604336cb2">00340</a>   simtime_t <a class="code" href="a00043.html#a647dc636e9aa2f8a70ac99b604336cb2" title="Stores a point in history up to which we need to keep all channel information stored (value should be...">recordStartTime</a>;
<a name="l00341"></a>00341 
<a name="l00342"></a>00342 <span class="keyword">public</span>:
<a name="l00348"></a><a class="code" href="a00043.html#a220306dd8d5282778f27be702d193431">00348</a>   <span class="keyword">typedef</span> std::list&lt;airframe_ptr_t&gt; <a class="code" href="a00043.html#a220306dd8d5282778f27be702d193431" title="Type for a container of AirFrames.">AirFrameVector</a>;
<a name="l00349"></a>00349 
<a name="l00350"></a>00350 <span class="keyword">protected</span>:
<a name="l00355"></a>00355   <span class="keywordtype">void</span> <a class="code" href="a00043.html#a4ec93f0a935723a0183de82969ff0d6e" title="Asserts that every inactive AirFrame is still intersecting with at least one active airframe or with ...">assertNoIntersections</a>() <span class="keyword">const</span>;
<a name="l00356"></a>00356 
<a name="l00357"></a>00357 
<a name="l00365"></a><a class="code" href="a00043.html#ab9b1803c1c37bc3d20924ea20fc8da59">00365</a>   <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="a00043.html#ab9b1803c1c37bc3d20924ea20fc8da59" title="Returns every AirFrame of an AirFrameMatrix which intersect with a given interval.">getIntersections</a>( <span class="keyword">const</span> <a class="code" href="a00043.html#aba8c8f81b5fad9216a08d86de4acb070">AirFrameMatrix</a>&amp;     airFrames
<a name="l00366"></a>00366                                 , simtime_t_cref            from
<a name="l00367"></a>00367                                 , simtime_t_cref            to
<a name="l00368"></a>00368                                 , <a class="code" href="a00043.html#a220306dd8d5282778f27be702d193431" title="Type for a container of AirFrames.">AirFrameVector</a>&amp;           outVector
<a name="l00369"></a>00369                                 , <a class="code" href="a00007.html" title="Functor which can be used as to filter for specific air frames.">airframe_filter_fctr</a> *<span class="keyword">const</span> fctrFilter = NULL)
<a name="l00370"></a>00370   {
<a name="l00371"></a>00371       <a class="code" href="a00024.html" title="Iterator for every intersection of a specific interval in a AirFrameMatrix.">const_iterator</a> itEnd = <a class="code" href="a00043.html#a37ac84f95c3faeb3e2606a4a01dbf36e" title="The end iterator for the matrix.">cConstItEnd</a>;
<a name="l00372"></a>00372       <span class="keywordflow">for</span> (<a class="code" href="a00024.html" title="Iterator for every intersection of a specific interval in a AirFrameMatrix.">const_iterator</a> it(&amp;airFrames, from, to); it != itEnd; ++it) {
<a name="l00373"></a>00373           <span class="keywordflow">if</span> (fctrFilter != NULL) {
<a name="l00374"></a>00374               <span class="keywordflow">if</span> (!fctrFilter-&gt;pass(it-&gt;second))
<a name="l00375"></a>00375                   <span class="keywordflow">continue</span>;
<a name="l00376"></a>00376           }
<a name="l00377"></a>00377           outVector.push_back(it-&gt;second);
<a name="l00378"></a>00378       }
<a name="l00379"></a>00379   }
<a name="l00380"></a>00380 
<a name="l00385"></a>00385   <span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="a00043.html#ac1f58994b3a3002151389722dc311c48" title="Returns true if there is at least one AirFrame in the passed AirFrameMatrix which intersect with the ...">isIntersecting</a>( <span class="keyword">const</span> <a class="code" href="a00043.html#aba8c8f81b5fad9216a08d86de4acb070">AirFrameMatrix</a>&amp; airFrames,
<a name="l00386"></a>00386                               simtime_t_cref from, simtime_t_cref to );
<a name="l00387"></a>00387 
<a name="l00397"></a>00397   <span class="keywordtype">void</span> <a class="code" href="a00043.html#a93b197f70e37825ac3fdc760960144f5" title="Moves a previously active AirFrame to the inactive AirFrames.">addToInactives</a>(<a class="code" href="a00043.html#aa93cf512eb51209e31b2d4903faca31d">airframe_ptr_t</a> a, simtime_t_cref startTime, simtime_t_cref endTime);
<a name="l00398"></a>00398 
<a name="l00402"></a>00402   <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="a00043.html#a1c021b6db89a2f805004e221dd84b3f1" title="Deletes an AirFrame from an AirFrameMatrix.">deleteAirFrame</a>(<a class="code" href="a00043.html#aba8c8f81b5fad9216a08d86de4acb070">AirFrameMatrix</a>&amp; airFrames,
<a name="l00403"></a>00403                              <a class="code" href="a00043.html#aa93cf512eb51209e31b2d4903faca31d">airframe_ptr_t</a>  a,
<a name="l00404"></a>00404                              simtime_t_cref  startTime, simtime_t_cref endTime);
<a name="l00405"></a>00405 
<a name="l00409"></a>00409   simtime_t <a class="code" href="a00043.html#a93480cb69cb9c0367f30e6ccba84181e" title="Returns the start time of the odlest AirFrame on the channel.">findEarliestInfoPoint</a>(simtime_t_cref returnTimeIfEmpty = <a class="code" href="a00043.html#a6e51dfe3982d95dace93761852a0ac07" title="Invalid simulation time point, will be used for return value of emptiness.">invalidSimTime</a>) <span class="keyword">const</span>;
<a name="l00410"></a>00410 
<a name="l00421"></a>00421   <span class="keywordtype">void</span> <a class="code" href="a00043.html#a1ffb197c5bf86824cd04313da5e9e4ed" title="Checks if any information inside the passed interval can be discarded.">checkAndCleanInterval</a>(simtime_t_cref startTime, simtime_t_cref endTime);
<a name="l00422"></a>00422 
<a name="l00435"></a>00435   <span class="keywordtype">bool</span> <a class="code" href="a00043.html#ab4da0befdce7f2b27ae4a61d66ec2167" title="Returns true if all information inside the passed interval can be deleted.">canDiscardInterval</a>(simtime_t_cref startTime, simtime_t_cref endTime);
<a name="l00436"></a>00436 
<a name="l00443"></a><a class="code" href="a00043.html#a3a3f57cc0461d0cb7b938feb58dc3947">00443</a>   <span class="keywordtype">void</span> <a class="code" href="a00043.html#a3a3f57cc0461d0cb7b938feb58dc3947" title="Checks if any information up from the passed start time can be discarded.">checkAndCleanFrom</a>(simtime_t_cref start) {
<a name="l00444"></a>00444     <span class="comment">//nothing to do</span>
<a name="l00445"></a>00445     <span class="keywordflow">if</span>(<a class="code" href="a00043.html#ac674b4797484960e332e260af4825c04" title="Stores inactive AirFrames.">inactiveAirFrames</a>.empty())
<a name="l00446"></a>00446       <span class="keywordflow">return</span>;
<a name="l00447"></a>00447 
<a name="l00448"></a>00448     <span class="comment">//take last ended inactive airframe as end of interval</span>
<a name="l00449"></a>00449     <a class="code" href="a00043.html#a1ffb197c5bf86824cd04313da5e9e4ed" title="Checks if any information inside the passed interval can be discarded.">checkAndCleanInterval</a>(start, <a class="code" href="a00043.html#ac674b4797484960e332e260af4825c04" title="Stores inactive AirFrames.">inactiveAirFrames</a>.rbegin()-&gt;first);
<a name="l00450"></a>00450   }
<a name="l00451"></a>00451 
<a name="l00452"></a>00452 <span class="keyword">public</span>:
<a name="l00453"></a>00453   <a class="code" href="a00043.html" title="This class is used by the BasePhyLayer to keep track of the AirFrames on the channel.">ChannelInfo</a>()
<a name="l00454"></a>00454     : <a class="code" href="a00043.html#a2db96b70bb8678e3e4959985a7ef27a5" title="Stores the currently active AirFrames.">activeAirFrames</a>()
<a name="l00455"></a>00455     , <a class="code" href="a00043.html#ac674b4797484960e332e260af4825c04" title="Stores inactive AirFrames.">inactiveAirFrames</a>()
<a name="l00456"></a>00456     , <a class="code" href="a00043.html#a9c7678b4205557914b26e58edcdf44c2" title="Stores the start time of every AirFrame.">airFrameStarts</a>()
<a name="l00457"></a>00457     , <a class="code" href="a00043.html#a647dc636e9aa2f8a70ac99b604336cb2" title="Stores a point in history up to which we need to keep all channel information stored (value should be...">recordStartTime</a>(<a class="code" href="a00043.html#a6e51dfe3982d95dace93761852a0ac07" title="Invalid simulation time point, will be used for return value of emptiness.">invalidSimTime</a>)
<a name="l00458"></a>00458   {}
<a name="l00459"></a>00459 
<a name="l00460"></a>00460   <span class="keyword">virtual</span> ~<a class="code" href="a00043.html" title="This class is used by the BasePhyLayer to keep track of the AirFrames on the channel.">ChannelInfo</a>() {}
<a name="l00461"></a>00461 
<a name="l00470"></a>00470   <span class="keywordtype">void</span> <a class="code" href="a00043.html#a6d92d233abde2703171773354c8689cd" title="Tells the ChannelInfo that an AirFrame has started.">addAirFrame</a>(<a class="code" href="a00043.html#aa93cf512eb51209e31b2d4903faca31d">airframe_ptr_t</a> a, simtime_t_cref startTime);
<a name="l00471"></a>00471 
<a name="l00480"></a>00480   simtime_t <a class="code" href="a00043.html#ac033379c710f5d4c66168032a92f0c1e" title="Tells the ChannelInfo that an AirFrame is over.">removeAirFrame</a>(<a class="code" href="a00043.html#aa93cf512eb51209e31b2d4903faca31d">airframe_ptr_t</a> a, simtime_t_cref returnTimeIfEmpty = <a class="code" href="a00043.html#a6e51dfe3982d95dace93761852a0ac07" title="Invalid simulation time point, will be used for return value of emptiness.">invalidSimTime</a>);
<a name="l00481"></a>00481 
<a name="l00492"></a><a class="code" href="a00043.html#acb7f1f51f0f75b15fd29379e87128b27">00492</a>   <span class="keywordtype">void</span> <a class="code" href="a00043.html#acb7f1f51f0f75b15fd29379e87128b27" title="Fills the passed AirFrameVector reference with the AirFrames which intersect with the given time inte...">getAirFrames</a>( simtime_t_cref            from
<a name="l00493"></a>00493                      , simtime_t_cref            to
<a name="l00494"></a>00494                      , <a class="code" href="a00043.html#a220306dd8d5282778f27be702d193431" title="Type for a container of AirFrames.">AirFrameVector</a>&amp;           out
<a name="l00495"></a>00495                      , <a class="code" href="a00007.html" title="Functor which can be used as to filter for specific air frames.">airframe_filter_fctr</a> *<span class="keyword">const</span> fctrFilter = NULL)<span class="keyword"> const</span>
<a name="l00496"></a>00496 <span class="keyword">  </span>{
<a name="l00497"></a>00497       <span class="comment">//check for intersecting inactive AirFrames</span>
<a name="l00498"></a>00498       <a class="code" href="a00043.html#ab9b1803c1c37bc3d20924ea20fc8da59" title="Returns every AirFrame of an AirFrameMatrix which intersect with a given interval.">getIntersections</a>(<a class="code" href="a00043.html#ac674b4797484960e332e260af4825c04" title="Stores inactive AirFrames.">inactiveAirFrames</a>, from, to, out, fctrFilter);
<a name="l00499"></a>00499 
<a name="l00500"></a>00500       <span class="comment">//check for intersecting active AirFrames</span>
<a name="l00501"></a>00501       <a class="code" href="a00043.html#ab9b1803c1c37bc3d20924ea20fc8da59" title="Returns every AirFrame of an AirFrameMatrix which intersect with a given interval.">getIntersections</a>(<a class="code" href="a00043.html#a2db96b70bb8678e3e4959985a7ef27a5" title="Stores the currently active AirFrames.">activeAirFrames</a>, from, to, out, fctrFilter);
<a name="l00502"></a>00502   }
<a name="l00503"></a>00503 
<a name="l00508"></a><a class="code" href="a00043.html#a69386cf7e037a163e298c0fd70bd7dea">00508</a>   simtime_t <a class="code" href="a00043.html#a69386cf7e037a163e298c0fd70bd7dea" title="Returns the current time-point from that information concerning AirFrames is needed to be stored...">getEarliestInfoPoint</a>(simtime_t_cref returnTimeIfEmpty = <a class="code" href="a00043.html#a6e51dfe3982d95dace93761852a0ac07" title="Invalid simulation time point, will be used for return value of emptiness.">invalidSimTime</a>)<span class="keyword"> const</span>
<a name="l00509"></a>00509 <span class="keyword">  </span>{
<a name="l00510"></a>00510     <span class="keywordflow">return</span> <a class="code" href="a00043.html#a93480cb69cb9c0367f30e6ccba84181e" title="Returns the start time of the odlest AirFrame on the channel.">findEarliestInfoPoint</a>(returnTimeIfEmpty);
<a name="l00511"></a>00511   }
<a name="l00512"></a>00512 
<a name="l00527"></a><a class="code" href="a00043.html#abab4a17344f3b254693ed34309c6466f">00527</a>   <span class="keywordtype">void</span> <a class="code" href="a00043.html#abab4a17344f3b254693ed34309c6466f" title="Tells ChannelInfo to keep from now on all channel information until the passed time in history...">startRecording</a>(simtime_t_cref start)
<a name="l00528"></a>00528   {
<a name="l00529"></a>00529     <span class="comment">// clean up until old record start</span>
<a name="l00530"></a>00530     <span class="keywordflow">if</span>(<a class="code" href="a00043.html#a647dc636e9aa2f8a70ac99b604336cb2" title="Stores a point in history up to which we need to keep all channel information stored (value should be...">recordStartTime</a> &gt;= SIMTIME_ZERO) {
<a name="l00531"></a>00531       <a class="code" href="a00043.html#a647dc636e9aa2f8a70ac99b604336cb2" title="Stores a point in history up to which we need to keep all channel information stored (value should be...">recordStartTime</a> = start;
<a name="l00532"></a>00532       <a class="code" href="a00043.html#a1ffb197c5bf86824cd04313da5e9e4ed" title="Checks if any information inside the passed interval can be discarded.">checkAndCleanInterval</a>(0, <a class="code" href="a00043.html#a647dc636e9aa2f8a70ac99b604336cb2" title="Stores a point in history up to which we need to keep all channel information stored (value should be...">recordStartTime</a>);
<a name="l00533"></a>00533     } <span class="keywordflow">else</span> {
<a name="l00534"></a>00534       <a class="code" href="a00043.html#a647dc636e9aa2f8a70ac99b604336cb2" title="Stores a point in history up to which we need to keep all channel information stored (value should be...">recordStartTime</a> = start;
<a name="l00535"></a>00535     }
<a name="l00536"></a>00536   }
<a name="l00537"></a>00537 
<a name="l00544"></a><a class="code" href="a00043.html#a884277584d1abf73eaca5df0c61e08c9">00544</a>   <span class="keywordtype">void</span> <a class="code" href="a00043.html#a884277584d1abf73eaca5df0c61e08c9" title="Tells ChannelInfo to stop recording Information from now on.">stopRecording</a>()
<a name="l00545"></a>00545   {
<a name="l00546"></a>00546     <span class="keywordflow">if</span>(<a class="code" href="a00043.html#a647dc636e9aa2f8a70ac99b604336cb2" title="Stores a point in history up to which we need to keep all channel information stored (value should be...">recordStartTime</a> &gt;= SIMTIME_ZERO) {
<a name="l00547"></a>00547       simtime_t old = <a class="code" href="a00043.html#a647dc636e9aa2f8a70ac99b604336cb2" title="Stores a point in history up to which we need to keep all channel information stored (value should be...">recordStartTime</a>;
<a name="l00548"></a>00548       <a class="code" href="a00043.html#a647dc636e9aa2f8a70ac99b604336cb2" title="Stores a point in history up to which we need to keep all channel information stored (value should be...">recordStartTime</a> = <a class="code" href="a00043.html#a6e51dfe3982d95dace93761852a0ac07" title="Invalid simulation time point, will be used for return value of emptiness.">invalidSimTime</a>;
<a name="l00549"></a>00549       <a class="code" href="a00043.html#a3a3f57cc0461d0cb7b938feb58dc3947" title="Checks if any information up from the passed start time can be discarded.">checkAndCleanFrom</a>(old);
<a name="l00550"></a>00550     }
<a name="l00551"></a>00551   }
<a name="l00552"></a>00552 
<a name="l00557"></a><a class="code" href="a00043.html#a5b1b8d56aa2fa64b5d79c0cf5c3167a9">00557</a>   <span class="keywordtype">bool</span> <a class="code" href="a00043.html#a5b1b8d56aa2fa64b5d79c0cf5c3167a9" title="Returns true if ChannelInfo is currently recording.">isRecording</a>()<span class="keyword"> const</span>
<a name="l00558"></a>00558 <span class="keyword">  </span>{
<a name="l00559"></a>00559     <span class="keywordflow">return</span> <a class="code" href="a00043.html#a647dc636e9aa2f8a70ac99b604336cb2" title="Stores a point in history up to which we need to keep all channel information stored (value should be...">recordStartTime</a> &gt;= SIMTIME_ZERO;
<a name="l00560"></a>00560   }
<a name="l00561"></a>00561 
<a name="l00566"></a><a class="code" href="a00043.html#a5af012c57b6bb9930b1634138ab65bf8">00566</a>   <span class="keywordtype">bool</span> <a class="code" href="a00043.html#a5af012c57b6bb9930b1634138ab65bf8" title="Returns true if there are currently no active or inactive AirFrames on the channel.">isChannelEmpty</a>()<span class="keyword"> const </span>{
<a name="l00567"></a>00567     <span class="keywordflow">return</span> <a class="code" href="a00043.html#a9c7678b4205557914b26e58edcdf44c2" title="Stores the start time of every AirFrame.">airFrameStarts</a>.empty();
<a name="l00568"></a>00568   }
<a name="l00569"></a>00569 };
<a name="l00570"></a>00570 
<a name="l00571"></a>00571 <span class="preprocessor">#endif </span><span class="comment">/*CHANNELINFO_H_*/</span>
</pre></div></div>
</div>
  <div id="nav-path" class="navpath">
    <ul>
      <li class="navelem"><b>ChannelInfo.h</b>      </li>

    <li class="footer">Generated on Tue Mar 5 2013 21:26:29 for MiXiM by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.5.1 </li>
   </ul>
 </div>


</body>
</html>
